package com.common.util;

import java.io.File;
import java.io.FileOutputStream;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFPalette;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;


import com.sysmanage.common.tools.util.AppParamMemoryUtils;
/**
* @ClassName: ExportUtil
* @Description: 导出Excel的工具类
* @author huangjia
* @date 2014-7-2
*/
public class ExportUtil {
	/**
	 * @Title:ExportUtil
	 * @Description:将web项目中的页面的表格导出成Excele文件
	 * @param rs 数据库查询的结果集，sheetName Excel的表名，columnList 选中的要导出成Excel的列对象
	 * @return String 返回导出的Excel文件的绝对路径
	 */
	public static String resultSetToExcel(ResultSet rs,String xlsName,String sheetName,List<String> columnList,Hashtable rgbTable)
			throws Exception{
		AppParamMemoryUtils dictionaryUtils = AppParamMemoryUtils.getInstance();
		//产生一个工作簿
		HSSFWorkbook workbook = new HSSFWorkbook();
		//产生一个工作表
		HSSFSheet sheet = workbook.createSheet();
		workbook.setSheetName(0,sheetName);
		//产生一行
		HSSFRow row= sheet.createRow((int)0);;
		//声明一个单元格
		HSSFCell cell;
		//取得ResultSet的描述数据对象
		ResultSetMetaData md=rs.getMetaData();
		//取得所有字段的数目
		int nColumn=md.getColumnCount();
		//创建一种单元格样式
		//CellStyle style = workbook.createCellStyle();
		//设置样式的背景填充颜色
	    //style.setFillBackgroundColor(IndexedColors.BLUE.getIndex());
		//写入各个字段的名称
		 //自定义颜色索引
		 HSSFPalette palette = workbook.getCustomPalette(); 
		 //cell.setCellStyle(style);  //cell 是 HSSFCell 对象
		
		
		int iRow=1;
		int cellType = 0;
		//写入各条记录，每条记录对应Excel中的一行
		/*while(rs.next())
		{
			row= sheet.createRow(iRow);
			for(int j=1;j<=nColumn;j++){
				cell = row.createCell((short)(j-1));
				ColumnRGB columnrgb = (ColumnRGB) rgbTable.get(columnList.get(j-1).getColumnId());
				if(columnrgb!=null){
					style.setFillForegroundColor((short)8);
					cell.setCellStyle(style);
				}
				style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
				cellType =hSSFCelldataType(md.getColumnType(j));
				cell.setCellType(cellType);
				cell.setCellType(HSSFCell.ENCODING_UTF_16);
				if(rs.getObject(j)!=null){
					if(cellType==HSSFCell.CELL_TYPE_NUMERIC){
						if(columnList.get(j-1).getIsRef()==1){
							String name = dictionaryUtils.getNameByNickAndKey(columnList.get(j-1).getRefDomain(), rs.getString(j));
							cell.setCellValue(name);
						}else{
							cell.setCellValue(rs.getDouble(j));
						}
					  }else{
						  cell.setCellValue(rs.getString(j));
					  }
				}else{
					  cell.setCellValue("");
				  }  
			}
			iRow++;	
		}*/
		FileOutputStream fOut = new FileOutputStream(xlsName);
		workbook.write(fOut);
		fOut.flush();
		fOut.close();
		//目标文件
		File file = new File(xlsName);
		//压缩后的文件名
		String zipFilename = xlsName.substring(0, xlsName.length()-4);
		//压缩后的文件
		File zipFile = new File(zipFilename+".zip");
		File[] srcfile = new File[1];
		srcfile[0] = file;
		//调用压缩文件的方法压缩文件
		FileZip.zipFiles(srcfile, zipFile);
		return zipFile.getAbsolutePath();
	}
	/**
	 * @Title:hSSFCelldataType
	 * @Description:设置HSSFCell.CELL_TYPE_NUMERIC的单元格的数据的数据类型的工具方法
	 * @param dataType 整型的参数
	 * @return Integer 返回的HSSFCell.CELL_TYPE_NUMERIC表示单元格的数据类型;
	 */
	public static Integer hSSFCelldataType(Integer dataType){
		int dType = HSSFCell.CELL_TYPE_STRING;
		switch (dataType) {
		case 4:
		case 5:
		case 6:
		case 8:
		case 3:
		case -7:
			dType = HSSFCell.CELL_TYPE_NUMERIC;
			 break;
		default:
			dType = HSSFCell.CELL_TYPE_STRING;
			break;
		}
		return dType;
	}
}
